<template>
  <div class="user-detail">
    <el-form ref="form" :model="form" label-width="80px">
      <el-form-item label="手机">
        <el-input v-model="form.mobile" />
      </el-form-item>
      <el-form-item label="入职时间">
        <el-date-picker v-model="form.correctionTime" type="date" placeholder="选择日期" style="width: 100%;" />
      </el-form-item>
      <el-form-item label="员工头像">
        <!-- <img :src="form.staffPhoto" alt="图片没有显示出来的替代文字" title="鼠标移动上去显示的文字" width="100"> -->
        <!-- staffPhoto一开始的时候，初始值是 '' -->
        <!-- 然后会发请求，获取这个值， 传递给子组件，这个el-tabs一开始就会执行，请求获取到新的staffPhoto之后 -->
        <!-- 不会通知子组件去更新自己， 所以子组件还是没有最新的图片地址，需要我们有方法，让子组件去动态更新一下 -->
        <!-- key除了放在v-for循环上面，还可以放在任何地方，做组件的更新使用 -->
        <!-- vue底层是根据 key的 来进行diff算法的， key一遍，组件就会立马更新 -->
        <!-- key一遍，就是底层 新旧虚拟dom节点的对比， 发现key不一样，就更新绑定key的那个组件 -->
        <UploadImg :key="form.id" :src="form.staffPhoto" @upload-success="uploadSucces" />
      </el-form-item>
      <el-form-item>
        <el-button type="primary" @click="onSubmit">保存更新</el-button>
        <el-button>返回</el-button>
      </el-form-item>
    </el-form>
  </div>
</template>

<script>
// 用户信息的 获取和更新  和 登录设置里面的 接口一模一样
import { getUserInfoRequest, updateUserInfoRequest } from '@/api/employees'

export default {
  name: '',
  data() {
    return {
      form: {
        mobile: '',
        correctionTime: '',
        staffPhoto: ''
      }
    }
  },
  // created: {},
  created() {
    this.getUserInfo()
  },
  methods: {
    async getUserInfo() {
      try {
        const res = await getUserInfoRequest(this.$route.query?.id || '')
        // 业务成功以后，的处理
        // 页面数据的回填
        if (res.success) {
          // this.form.username = res.data.username
          // this.form.password = res.data.password
          // 因为更新的时候，需要很多个参数，我们不能把res.data里面的其他数据丢弃
          this.form = res.data
        }
      } catch (err) {
        console.log('getUserInfoRequest: ', err)
      }
    },
    async updateUserInfo() {
      // 为什么抽离出去： 因为请求里面有try catch， 有业务成功业务失败， 代码比较多
      // 提交按钮事件onSubmit里面，还要写兜底校验，不方便写太多业务代码，
      try {
        const res = await updateUserInfoRequest(this.form)
        // 下面一小段代码是 http请求 200走的位置
        if (res.success) {
          // 如果更新成功以后，做什么呢？ 一般是回到之前的列表页面，也就是上一级
          this.$router.back()
        } else {
          this.$message.error('更新我们个人信息失败')
        }
      } catch (err) {
        // 服务器请求失败 4xx 5xx  非200 进这里
        console.log('updateUserInfoRequest: ', err)
      }
    },
    onSubmit() {
      // 并不是所有 发请求之前，都要校验，可以先发请求，试试有没有问题
      // 在去慢慢完善 校验，还有兜底校验
      // const res = await updateUserInfoRequest(this.form)
      // console.log(res)
      this.updateUserInfo()
    },
    uploadSucces(res) {
      // 这个函数的参数，就是子组件向父组件传递过来的值
      console.log('父组件接收到子组件的值：', res)
      this.form.staffPhoto = res
      console.log(this.form)
    }
  }
}
</script>
